package com.ce.framework.datamaintain.logic;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Collection;
import java.util.List;

import org.apache.poi2.hssf.usermodel.HSSFSheet;
import org.apache.poi2.hssf.usermodel.HSSFWorkbook;

import com.ce.framework.exception.AppException;
import com.ce.framework.exception.DaoException;

/**
 * 嫦娥软件有限公司 版权所有 2013
 * 创建人： andy
 * 创建时间： Aug 24, 2010 10:02:08 AM
 * 功能描述：逻辑层基类接口
 * ==================================
 * 修改历史
 * 修改人        修改时间      修改位置（函数名）
 *
 * ==================================
 */
public interface IBaseLogic {

	/**
	 * 开发人： andy
	 * 开发时间： Aug 24, 2010 10:02:25 AM
	 * 功能描述：实现对数据的逻辑删除
	 * 方法的参数和返回值
	 * @param po  要删除的PO对象
	 * @param ids 删除对象的主键，字符串数组
	 * @param delField  标识删除的字段名称
	 * @param childPoName  子表的类名
	 * @return
	 * @throws AppException
	 * int 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public int deleteLogic(Object po, String[] ids, String delField,String childPoName) throws AppException;
	
	/**
	 * 开发人： andy
	 * 开发时间： Aug 24, 2010 10:03:31 AM
	 * 功能描述：实现对数据的添加
	 * 方法的参数和返回值
	 * @param po
	 * @throws AppException
	 * void 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public void addPo(Object po)throws AppException;

	/**
	 * 开发人： andy
	 * 开发时间： Aug 24, 2010 10:03:45 AM
	 * 功能描述：实现对数据的更新
	 * 方法的参数和返回值
	 * @param po
	 * @throws AppException
	 * void 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public void updatePo(Object po)throws AppException;

	/**
	 * 开发人： andy
	 * 开发时间： Aug 24, 2010 10:03:57 AM
	 * 功能描述：实现对多条数据的更新
	 * 方法的参数和返回值
	 * @param pos
	 * @throws AppException
	 * void 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public void updatePos(Collection<?> pos)throws AppException;
	
	/**
	 * 开发人： andy
	 * 开发时间： Aug 24, 2010 10:04:08 AM
	 * 功能描述：实现物理删除多条数据
	 * 方法的参数和返回值
	 * @param delList
	 * @throws AppException
	 * void 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public void deletePos(List<?> delList)throws AppException;
	
	/**
	 * 开发人： andy
	 * 开发时间： Aug 24, 2010 10:04:27 AM
	 * 功能描述：通过组合的HQL语句删除相应数据  (物理删除)
	 * 方法的参数和返回值
	 * @param hql  HQL语句
	 * @throws AppException
	 * void 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public void deleteSearchHQL(String hql)throws AppException;
	
	/**
	 * 开发人： andy
	 * 开发时间： Aug 24, 2010 10:05:00 AM
	 * 功能描述：实现主子表的添加
	 * 方法的参数和返回值
	 * @param po  主表对象
	 * @param addChildList  要增加子表对象集合 （可以为空）
	 * @throws AppException
	 * void 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public void addPo(Object po,List<?> addChildList)throws AppException;
	
	/**
	 * 开发人： andy
	 * 开发时间： Aug 24, 2010 10:05:35 AM
	 * 功能描述：实现主子表的更新
	 * 方法的参数和返回值
	 * @param po  主表对象
	 * @param addChildList 要增加的子表对象集合 （可以为空）
	 * @param modifyChildList  要修改的子表对象集合 （可以为空）
	 * @throws AppException
	 * void 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public void updatePo(Object po,List<?> addChildList,List<?> modifyChildList)throws AppException;

	public void updatePo(Object po,List<?> addChildList,List<?> modifyChildList,List<?> deleteChildList)throws AppException;
	
	/**
	 * 开发人： andy
	 * 开发时间： Aug 24, 2010 10:06:41 AM
	 * 功能描述： 根据po对象的名称及主键获取po对象
	 * 方法的参数和返回值
	 * @param poClassName  po对象的名称
	 * @param pk           主键
	 * @return
	 * @throws AppException
	 * Object 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public Object getPOByPk(String poClassName,String pk)throws AppException;
	
	/**
	 * 开发人： andy
	 * 开发时间： Sep 7, 2010 11:35:05 AM
	 * 功能描述：得到查询结果对象。
	 * 方法的参数和返回值
	 * @param searchInfo
	 * @return
	 * @throws AppException
	 * List 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public List<?> getSearchResult(ISearchInfo searchInfo)throws AppException;
	
	/**
	 * 开发人： andy
	 * 开发时间： Sep 7, 2010 11:35:18 AM
	 * 功能描述：根据查询条件得到所有的结果记录对象
	 * 方法的参数和返回值
	 * @param searchCondition
	 * @return
	 * @throws AppException
	 * List 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public List<?> getSearchResult(ISearchCondition searchCondition)throws AppException;
	
	/**
	 * 开发人： andy
	 * 开发时间： 2013-9-11 上午10:47:25
	 * 功能描述：通过HQL语句查询相应的数据列表
	 * 方法的参数和返回值
	 * @param hql
	 * @return
	 * @throws DaoException
	 * List 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public List<?> searchByHql(final String hql) throws AppException;

	public List<?> searchByHql(final String hql,Object[] params) throws AppException;
	/**
	 * 开发人： andy
	 * 开发时间： 2013-9-16 上午09:17:20
	 * 功能描述：根据sql语句获取List对象
	 * 方法的参数和返回值
	 * @param sql
	 * @param mapper
	 * @return
	 * List 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public List<?> executeSQLQuery(String sql, ISQLMapper mapper);
	
	/**
	 * 开发人： andy
	 * 开发时间： 2013-9-16 上午09:17:20
	 * 功能描述：根据sql语句获取List对象
	 * 方法的参数和返回值
	 * @param sql
	 * @param mapper
	 * @return
	 * List 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public List<?> executePreparedSQLQuery(SQLSearchCondition condition, ISQLMapper mapper);
	
	/**
	 * 开发人： andy
	 * 开发时间： 2013-9-28 下午03:57:35
	 * 功能描述：根据HQL获取对象的条数
	 * 方法的参数和返回值
	 * @param hql
	 * @return
	 * int 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public int getCntByHQL(String hql)throws AppException;

	public HSSFWorkbook genExcel(ISearchCondition searchCondition,File f) throws FileNotFoundException, IOException, AppException;
	public HSSFWorkbook genExcel(Object obj,File f,List<?> data) throws FileNotFoundException, IOException, AppException;
	public void genExcel(final Object search,final HSSFSheet sheet,List<?> data) throws FileNotFoundException, IOException, AppException;
}
